home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 8: LINUX Games
/
Linux Cubed Series 8 - LINUX Games.iso
/
games
/
muds
/
mordor_2.000
/
mordor_2
/
src
/
special1.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-06-25
|
4KB
|
174 lines
/*
* SPECIAL1.C:
*
* User routines dealing with special routines.
*
* Copyright (C) 1992, 1993 Brett J. Vickers
*
*/
#include "mstruct.h"
#include "mextern.h"
int combo_box();
/************************************************************************/
/* special_obj */
/************************************************************************/
#define SP_INVENTORY 0
#define SP_EQUIPMENT 1
#define SP_ROOM 2
int special_obj(ply_ptr, cmnd, special)
creature *ply_ptr;
cmd *cmnd;
int special;
{
object *obj_ptr;
room *rom_ptr;
int fd, n, where;
char str[80], str2[160], match=0, i;
fd = ply_ptr->fd;
rom_ptr = ply_ptr->parent_rom;
obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj,
cmnd->str[1], cmnd->val[1]);
where = SP_INVENTORY;
if(!obj_ptr || !cmnd->val[1]) {
for(n=0; n<MAXWEAR; n++) {
if(!ply_ptr->ready[n]) continue;
if(EQUAL(ply_ptr->ready[n], cmnd->str[1]))
match++;
else continue;
if(match == cmnd->val[1] || !cmnd->val[1]) {
obj_ptr = ply_ptr->ready[n];
where = SP_EQUIPMENT;
break;
}
}
}
if(!obj_ptr) {
obj_ptr = find_obj(ply_ptr, rom_ptr->first_obj,
cmnd->str[1], cmnd->val[1]);
where = SP_ROOM;
}
if(!obj_ptr) {
print(fd, "You don't see that.\n");
return(-1);
}
if(obj_ptr->special != special)
return(-2);
switch(obj_ptr->special) {
case SP_MAPSC:
strcpy(str, obj_ptr->name);
for(i=0; i<strlen(str); i++)
if(str[i] == ' ') str[i] = '_';
sprintf(str2, "%s/%s", OBJPATH, str);
view_file(fd, 1, str2);
return(DOPROMPT);
case SP_COMBO:
return(combo_box(ply_ptr, obj_ptr));
default:
print(fd, "Nothing.\n");
}
return(0);
}
/************************************************************************/
/* special_cmd */
/************************************************************************/
int special_cmd(ply_ptr, special, cmnd)
creature *ply_ptr;
int special;
cmd *cmnd;
{
int n, fd;
fd = ply_ptr->fd;
switch(special) {
case SP_MAPSC:
case SP_COMBO:
if(cmnd->num < 2) {
print(fd, "Do that to what?\n");
return(0);
}
n = special_obj(ply_ptr, cmnd, special);
if(n == -1) return(0);
if(n == -2) {
print(fd, "I'd like to see you try.\n");
return(0);
}
else return(n);
default:
print(ply_ptr->fd, "Nothing happens.\n");
return(0);
}
}
/************************************************************************/
/* combo_box */
/************************************************************************/
int combo_box(ply_ptr, obj_ptr)
creature *ply_ptr;
object *obj_ptr;
{
xtag *xp;
room *rom_ptr;
char str[80];
int fd, dmg, i;
fd = ply_ptr->fd;
rom_ptr = ply_ptr->parent_rom;
str[0] = obj_ptr->sdice+'0'; str[1] = 0;
if(obj_ptr->ndice == 1 || strlen(Ply[fd].extr->tempstr[3]) > 70)
strcpy(Ply[fd].extr->tempstr[3], str);
else
strcat(Ply[fd].extr->tempstr[3], str);
print(fd, "Click.\n");
broadcast_rom(fd, ply_ptr->rom_num, "%M presses %i.", ply_ptr, obj_ptr);
if(strlen(Ply[fd].extr->tempstr[3]) >= strlen(obj_ptr->use_output)) {
if(strcmp(Ply[fd].extr->tempstr[3], obj_ptr->use_output)) {
dmg = mrand(20,40);
ply_ptr->hpcur -= dmg;
print(fd, "You were zapped for %d damage!\n", dmg);
broadcast_rom(fd, ply_ptr->rom_num,
"%M was zapped by %i!", ply_ptr, obj_ptr);
Ply[fd].extr->tempstr[3][0] = 0;
if(ply_ptr->hpcur < 1) {
print(fd, "You died.\n");
die(ply_ptr, ply_ptr);
}
}
else {
for(i=1, xp=rom_ptr->first_ext;
xp && i < obj_ptr->pdice;
i++, xp = xp->next_tag) ;
if(!xp) return(0);
print(fd, "You opened the %s!\n", xp->ext->name);
broadcast_rom(fd, ply_ptr->rom_num,
"%M opened the %s!", ply_ptr, xp->ext->name);
F_CLR(xp->ext, XLOCKD);
F_CLR(xp->ext, XCLOSD);
xp->ext->ltime.ltime = time(0);
}
}
return(0);
}